package com.hjm.project.agentRateInfo.controller;

import com.hjm.common.utils.ExcelUtil;
import com.hjm.common.utils.security.ShiroUtils;
import com.hjm.framework.aspectj.lang.annotation.Log;
import com.hjm.framework.aspectj.lang.enums.BusinessType;
import com.hjm.framework.web.controller.BaseController;
import com.hjm.framework.web.domain.AjaxResult;
import com.hjm.framework.web.page.TableDataInfo;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfo;
import com.hjm.project.agentInfo.agentInfo.service.IAgentInfoService;
import com.hjm.project.agentRateInfo.domain.AgentRateInfo;
import com.hjm.project.agentRateInfo.service.IAgentRateInfoService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 代理商费率模版Controller
 * 
 * @author Gdd
 */
@Controller
@RequestMapping("/agentRateInfo")
public class AgentRateInfoController extends BaseController {
    private String prefix = "agentRateInfo";

    @Resource
    private IAgentRateInfoService agentRateInfoService;
    @Resource
    private IAgentInfoService agentInfoService;

    @RequiresPermissions("agentRateInfo:agentRateInfo:view")
    @GetMapping()
    public String agentRateInfo() {
        return prefix + "/agentRateInfo";
    }

    /**
     * 选择上级代理费率模版查找带回页面
     * @return
     */
    @GetMapping("/selectAgentRateInfo")
    public String selectAgentRateInfo() {
        return prefix + "/selectAgentRateInfo";
    }

    /**
     * 查询代理商费率模版列表
     */
    @RequiresPermissions("agentRateInfo:agentRateInfo:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(AgentRateInfo agentRateInfo) {
        if (ShiroUtils.isAgent()) {
            agentRateInfo.setAgentNum(ShiroUtils.getLoginAgentNum());
        }
        startPage();
        List<AgentRateInfo> list = agentRateInfoService.selectAgentRateInfoList(agentRateInfo);
        return getDataTable(list);
    }


    /**
     * 查询上级代理商费率模版列表
     */
    @RequiresPermissions("agentRateInfo:agentRateInfo:list")
    @PostMapping("/belongList")
    @ResponseBody
    public TableDataInfo belongList(AgentRateInfo agentRateInfo) {
        if (ShiroUtils.isAgent()) {
            AgentInfo agentInfo = agentInfoService.selectAgentInfoById(ShiroUtils.getLoginAgentNum());
            agentRateInfo.setAgentNum(agentInfo.getBelongAgent().toString());
        }
        startPage();
        List<AgentRateInfo> list = agentRateInfoService.selectAgentRateInfoList(agentRateInfo);
        return getDataTable(list);
    }

    /**
     * 新增代理商费率模版
     */
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 初始化顶级代理模版
     */
    @GetMapping("/addInitModel")
    public String addInitModel()
    {
        return prefix + "/addInitModel";
    }

    /**
     * 新增保存代理商费率模版
     */
    @RequiresPermissions("agentRateInfo:agentRateInfo:add")
    @Log(title = "代理商费率模版", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(AgentRateInfo agentRateInfo) {
        return toAjax(agentRateInfoService.insertAgentRateInfo(agentRateInfo));
    }

    /**
     * 修改代理商费率模版
     */
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") String id, ModelMap mmap) {
        AgentRateInfo agentRateInfo = agentRateInfoService.selectAgentRateInfoById(id);
        mmap.put("agentRateInfo", agentRateInfo);
        return prefix + "/edit";
    }

    /**
     * 修改保存代理商费率模版
     */
    @RequiresPermissions("agentRateInfo:agentRateInfo:edit")
    @Log(title = "代理商费率模版", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(AgentRateInfo agentRateInfo) {
        return toAjax(agentRateInfoService.updateAgentRateInfo(agentRateInfo));
    }
    @RequiresPermissions("agentRateInfo:agentRateInfo:edit")
    @Log(title = "修改默认费率模板", businessType = BusinessType.UPDATE)
    @PostMapping("/updateDefault")
    @ResponseBody
    @Transactional
    public AjaxResult updateDefault(AgentRateInfo agentRateInfo) {
        //模版只能存在一个默认
        if (0 == agentRateInfo.getIsdefault()) {
            AgentRateInfo updateAgentRateInfo = new AgentRateInfo();
            updateAgentRateInfo.setIsdefault(1);
            if (ShiroUtils.isAgent()) {
                updateAgentRateInfo.setAgentNum(ShiroUtils.getLoginAgentNum());
            } else {
                updateAgentRateInfo.setAgentNum(agentRateInfo.getAgentNum());
            }
            agentRateInfoService.updateAgentRate(updateAgentRateInfo);
        }
        int i = agentRateInfoService.updateAgentRateInfoById(agentRateInfo);
        return toAjax(i);
    }

    /**
     * 删除代理商费率模版
     */
    @RequiresPermissions("agentRateInfo:agentRateInfo:remove")
    @Log(title = "代理商费率模版删除", businessType = BusinessType.DELETE)
    @PostMapping( "/remove")
    @ResponseBody
    public AjaxResult remove(Integer id) {
        return toAjax(agentRateInfoService.deleteAgentRateInfoById(id));
    }

    /**
     * 普通费率模版
     * @return
     */
    @GetMapping("/selectMerchantModel")
    public String selectMerchantModel() {
        return prefix + "/selectMerchantModel";
    }

    /**
     * 附加
     * @return
     */
    @GetMapping("/selectMerchantModelFj")
    public String selectMerchantModelFj() {
        return prefix + "/selectMerchantModelFj";
    }

}
